package persistance.dal;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import ucc.objects.CompteUtilisateurDTO;
import ucc.request.UccViewer;
import biz.BizFactory;

public class CompteUtilisateurFinderImpl implements CompteUtilisateurFinder {

	private PreparedStatement q1;
	private PreparedStatement q2;
	private final String Q1 = "select * from caisse.comptes_utilisateurs where nom_utilisateur=?";
	private final String Q2 = "select * from caisse.comptes_utilisateurs order by prenom asc, nom asc";

	public CompteUtilisateurFinderImpl() {
		this.q1 = DalBackEndServices.INSTANCE.prepare(Q1);
		this.q2 = DalBackEndServices.INSTANCE.prepare(Q2);
	}

	public CompteUtilisateurDTO leCompteUtilisateurDe(String nomDUtilisateur) {
		ResultSet rs = null;
		try {
			q1.setString(1, nomDUtilisateur);
			rs = q1.executeQuery();
			CompteUtilisateurDTO compteUtilisateur = BizFactory.INSTANCE
					.createEmptyCompteUtilisateurDTO();
			while (rs.next()) {
				compteUtilisateur.setNomDUtilisateur(nomDUtilisateur);
				compteUtilisateur.setMotDePasse(rs.getString("mot_de_passe"));
				compteUtilisateur.setFonction(UccViewer.INSTANCE
						.laFonctionNum(rs.getInt("id_fonction")));
				compteUtilisateur.setNom(rs.getString("nom"));
				compteUtilisateur.setPrenom(rs.getString("prenom"));
				compteUtilisateur.setTelephone(rs.getString("telephone"));
			}
			return compteUtilisateur;
		} catch (SQLException e) {
			System.out.println("[E][SQL] : ");
			e.printStackTrace();
		}
		return null;
	}

	public ArrayList<CompteUtilisateurDTO> lesComptesUtilisateurs() {
		ResultSet rs = null;
		ArrayList<CompteUtilisateurDTO> listeCompteUtilisateur = new ArrayList<CompteUtilisateurDTO>();
		try {
			rs = q2.executeQuery();
			while (rs.next()) {
				CompteUtilisateurDTO compteUtilisateur = BizFactory.INSTANCE
						.createEmptyCompteUtilisateurDTO();

				compteUtilisateur.setNomDUtilisateur(rs
						.getString("nom_utilisateur"));
				compteUtilisateur.setMotDePasse(rs.getString("mot_de_passe"));
				compteUtilisateur.setFonction(UccViewer.INSTANCE
						.laFonctionNum(rs.getInt("id_fonction")));
				compteUtilisateur.setNom(rs.getString("nom"));
				compteUtilisateur.setPrenom(rs.getString("prenom"));
				compteUtilisateur.setTelephone(rs.getString("telephone"));

				listeCompteUtilisateur.add(compteUtilisateur);
			}
			return listeCompteUtilisateur;
		} catch (SQLException e) {
			System.out.println("[E][SQL] : ");
			e.printStackTrace();
		}
		return null;
	}
}
